<?php

namespace app\index\controller;
// 该文件的位于application\index\controller文件夹

use app\common\model\Course;
use app\common\model\Klass;
use app\common\model\KlassCourse;
use think\Request;

class CourseController extends IndexController
{
    // 课程列表
    public function index()
    {
        $courses = Course::paginate();
        $this->assign('courses', $courses);

        // 显示登录表单
        return $this->fetch();
    }

    public function add()
    {
        /*       $klasses = Klass::all();
               $this->assign('klasses', $klasses);*/
        $Course = new Course();
        //halt($Course->Klasses());
        $this->assign('Course', $Course);

        return $this->fetch();
    }

    public function save1()
    {
        //halt(Request::instance()->post());
        //存课程信息
        $Course = new Course();
        $Course->name = Request::instance()->post('name');
        //halt($Course);

        //新增数据并验证。验证类对应 app/common/validate/Course.php
        //save必须明确指定字段，否则validate不生效,但是指定字段的话就没法存放正确的name。。。

        if (!$Course->validate(true)->save()) {
            return $this->error('保存错误:' . $Course->getError());
        }
        //---------------新增班级课程信息-------------------
        //接收klass_id这个数组
        $klassIds = Request::instance()->post('klass_id/a');// a表示获取的类型为数组

        //利用klass_id这个数组，拼接为包括klass_id和course_id的二维数组
        if (!is_null($klassIds)) {
            $datas = array();
            foreach ($klassIds as $klassId) {
                $data = array();
                $data['klass_id'] = $klassId;
                $data['course_id'] = $Course->id;//此时，由于前面已经执行过数据插入操作，所以可以直接获取到Course对象中的ID值。
                array_push($datas, $data);//数组压栈函数，前面为一维数组，第二个参数为数组第二维的数组
            }
            //利用saveAll()方法，将二维数据存入数据库
            if (!empty($datas)) {
                $KlassCourse = new KlassCourse();
                if (!$KlassCourse->validate()->saveAll($datas)) {
                    return $this->error('课程-班级信息保存错误' . $KlassCourse->getError());
                }
                unset($KlassCourse);
            }
        }
        //--------------------------新增班级-课程信息————————————————————————————————
        unset($Course);  //unset的出现位置和new语句的缩进量相同，在返回前，最后被执行。
        return $this->success('数据增加成功', url('index'));
    }

    public function save()
    {
        //存课程信息
        $Course = new Course();
        $Course->name = Request::instance()->post('name');
        //halt($Course);

        //新增数据并验证。验证类对应 app/common/validate/Course.php
        //save必须明确指定字段，否则validate不生效,但是指定字段的话就没法存放正确的name。。。

        if (!$Course->validate(true)->save()) {
            return $this->error('保存错误:' . $Course->getError());
        }
        //——————————————新增班级课程信息——————————————————————
        //接收klass_id这个数组
        $klassIds = Request::instance()->post('klass_id/a');

        //利用klass_id这个数组，拼接为包括klass_id和course_id的二维数组
        if (!is_null($klassIds)) {
            if (!$Course->klasses()->saveAll($klassIds)) {
                return $this->error('课程-班级信息保存错误：' . $Course->Klasses()->getError());
            }
        }
    }

    public function edit()
    {
        $id = Request::instance()->param('id/d');
        $Course = Course::get($id);
        //halt($id . $Course);

        if (is_null($Course)) {
            return $this->error('不存在ID为：' . $id . '的记录');
        }
        $this->assign('Course', $Course);
        return $this->fetch();
    }

    public function update()
    {
        //var_dump(Request::instance()->post());
        //更新当前课程基本信息
        $id = Request::instance()->post('id/d');
        if (is_null($Course = Course::get($id))) {
            return $this->error('不存在ID为：' . $id . '的记录');
        }
        //更新课程名称
        $Course->name = Request::instance()->post('name');
        if (is_null($Course->validate(true)->save())) {
            return $this->error('课程信息更新发生错误：' . $Course->getError());
        }

        //删除原有信息
        $map = ['course_id' => $id];
        //执行删除操作。由于可能存在 成功删除0条记录，故使用false来做判断，而不能使用
        //if(!KlassCourse::where($map)->delete() 这种写法
        //删除0条记录，也算成功
        if (false === $Course->KlassCourses()->where($map)->delete()) {
            return $this->error('删除班级课程关联系信息发生错误' . $Course->KlassCourses()->getError());
        }

        //增加新增数据，执行添加操作
        $klassIds = Request::instance()->post('klass_id/a');
        if (!is_null($klassIds)) {
            if (!$Course->Klasses()->saveAll($klassIds)) {
                return $this->error('课程-班级信息保存错误：' . $Course->Klasses()->getError());
            }
        }
        return $this->success('更新成功', url('index'));
    }
}



